#include "../libxluploader.h"
#include "sites.h"
#include <assert.h>

// static CSiteManager::m_instance = NULL;

//////////////////////////////////////////////////////////////////////////
// PUBLIC

CSiteManager* CSiteManager::getInstance() {
	static CSiteManager manager;
	return &manager;
}

bool CSiteManager::addSite(ISite *site) {
	assert (site != NULL);

	Container::iterator it;
	for (it = m_sites.begin(); it != m_sites.end(); ++ it) {
		if (*it == site) {
			return true; // already have
		}
	}

	m_sites.push_back(site);
	return true;
}

bool CSiteManager::removeSite(ISite *site) {
	assert (site != NULL);

	Container::iterator it;
	for (it = m_sites.begin(); it != m_sites.end(); ++ it) {
		if (*it == site) {
			m_sites.erase(it);
			return true;
		}
	}

	return false; // not found
}

size_t CSiteManager::getSiteCount() const {
	return m_sites.size();
}

ISite* CSiteManager::getSiteByIndex(size_t index) {
	assert (index < getSiteCount());
	if (index >= getSiteCount()) {
		return NULL;
	}

	return m_sites[index];
}


//////////////////////////////////////////////////////////////////////////
// PRIVATE

CSiteManager::CSiteManager() {
	addSite(new CSiteTinyPic());
	addSite(new CSiteImageShack());
	// addSite(new CSiteImgPlace());
	// addSite(new CSiteImgur());
	// addSite(new CSiteImageHostOrg());
}

CSiteManager::~CSiteManager() {
	Container::iterator it;
	for (it = m_sites.begin(); it != m_sites.end(); ++ it) {
		delete (*it);
	}

	m_sites.clear();
}